package program_structure;

import java.util.Scanner;

/**
 * @author : niu niu
 * @version : 1.0.0
 * @date : 2022/8/22 22:37
 * 标准输入输出
 *  1.输出：System.out.println(传递任意数据类型，多个类型使用 + 拼接) 输出后自带换行符 -- sout
 *                          若不传任何参数，当作换行使用
 *       System.out.print(传递任意数据类型，多个类型使用 + 拼接)
 *                    与println区别：1.输出后不带换行
 *                                  2.必须要在（）传递参数
 *       System.out.printf()  和 C语言  printf(); 使用方法一样-- souf
 *
 *  2.输入：从键盘中获取一个数据 - 使用Scanner类
 *      使用流程
 *              1.产生一个系统输入对象
 *                  Scanner scanner = new Scanner(System.in);
 *              2.从键盘中获取一个数据 nextXXX()表示获取相应的数据类型  String是 nextLine();
 *                  整形：int a = scanner.nextInt();
 *                  字符串：String str = scanner.nextLine();
 *                  浮点数：Double d = scanner.nextDouble();
 *              3.多个输入时：使用while()+hasNextXXX()方法--->
 *                                    判断系统输入的是否是指定类型的内容，
 *                                    若碰到不是相应类型，则返回false循环终止
 *                          多个输入为字符串类型，hasNextLine()需要Ctrl+D 退出 ;
 *
 *  3.输入缓冲问题：当接受一个类型数据，紧接着接受String类型时：当第一个类型输入完毕后，输入回车，
 *                 回车会被当作换行符传入String类型的变量，造成少输入一个字符串的现象；
 *          解决方案：1.先输入字符串
 *                   2.多输入一行scanner.nextLine() 吃掉多余的回车。
 *
 *  4.转义字符： /+字符  eg:""默认表示字符串，+  /"  就可打印 "
 */
public class InputOutPutDemo {
    public static void main(String[] args) {
        //输出：
        System.out.println("这是一个数："+190);
        System.out.println();
        System.out.println("换了一行");
        System.out.print("这是不换行的print"+191);
        System.out.printf("%s\n","这是C的printf用法");
        //单个输入： 获取输入流对象
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入姓名：");
        String name =scanner.nextLine();
        System.out.println("请输入年龄：");
        int age  =scanner.nextInt();
        System.out.println("请输入地址：");
        String eatMore =scanner.nextLine();
        String add =scanner.nextLine();
        System.out.println("请输入工资：");
        Double sal =scanner.nextDouble();
        System.out.println("姓名："+name+",地址："+ add+",年龄："+ age + ",工资："+sal);
        //多个输入：循环从键盘中读取数据，求其平均值
        Scanner scanner1 = new Scanner(System.in);
        int num=0;
        int sum=0;
        //读取非int则返回false 退出循环
        while(scanner1.hasNextInt()){
            int tem = scanner1.nextInt();
            sum+=tem;
            num++;
        }
        System.out.println("sum = "+sum);
        System.out.println("avg = "+sum/num*1.0);
        //多个输入：从键盘中循环读取多个字符串并输出
        while (scanner.hasNextLine()){
            String str = scanner.nextLine();
            System.out.println("读取的字符串内容为："+str);
        }
        System.out.println("程序退出");
    }

}
